home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / asm / ESA.lha / ESA / examples / QuickSort.ei < prev    next >
Text File  |  1998-12-18  |  2KB  |  64 lines

  1. ****************************************************************************
  2. * THIS IS NOT A STANDALONE SOURCE!
  3. * You can compile and assemble it, but you can't run it!!!
  4. *
  5. * The procedure below execute the sorting on a vector of 32bit signed inte-
  6. * gers using the QuickSort algorithm.
  7. *
  8. * Note that this is meant to be an example only, so optimization has been
  9. * sacrificed to enhance the readability (btw: ESA isn't indicated at all
  10. * for this kinda things...).
  11. *
  12. * To use it you need an integers vector of any length.
  13. ****************************************************************************
  14.  
  15. ****************************************************************************
  16. * QuickSort v1.0.0
  17. ****************************************************************************
  18. * INFO    sorts in ascending order a vector of signed long integer
  19. * SYNOPSIS    QuickSort[Vec, L , R]
  20. *              a0   d0  d1
  21. * IN    Vec    adr of vector to sort    
  22. *    L    Leftmost element index (tipically 0)
  23. *    R    Rightmost element index (tipically # of integers-1)
  24. * NOTE vector elems are .l
  25. ****************************************************************************
  26.  
  27.     procedure QuickSort[a0/d0-d1],d0-d5
  28.  
  29.      move.l    d0,d4    ;d4=L; d0=i
  30.     move.l    d1,d5    ;d5=R; d1=j
  31.  
  32.     move.l    d4,d2
  33.     add.l    d5,d2
  34.     lsr.l    #1,d2    ;(L+R)/2
  35.     move.l    (a0,d2.l*4),d2    ;PVT
  36.  
  37.     repeat
  38.  
  39.      while.s (a0,d0.l*4)<d2
  40.       addq.l    #1,d0    ;inc i
  41.      ewhile
  42.      while.s (a0,d1.l*4)>d2
  43.       subq.l    #1,d1    ;dec j
  44.      ewhile
  45.  
  46.      when.s d0<=d1    ;if i<j
  47.       move.l    (a0,d0.l*4),d3
  48.       move.l    (a0,d1.l*4),(a0,d0.l*4)
  49.       move.l    d3,(a0,d1.l*4)    ;Vec[i] <-> Vec[j]
  50.       addq.l    #1,d0    ;inc i
  51.       subq.l    #1,d1    ;dec j
  52.      ewhen
  53.  
  54.     until.s d0>d1
  55.  
  56.     when.s d4<d1
  57.      QuickSort.s[sav:a0,d4,d1]
  58.     ewhen
  59.     when.s d0<d5
  60.      QuickSort.s[sav:a0,d0,d5]
  61.     ewhen
  62.  
  63.     eproc
  64.